________________________________________________________________________ Chapter 11: Commands 99 ________________________________________________________________________ CHAPTER ELEVEN: COMMANDS This chapter provides an alphabetical listing of all the commands available in PADtalk. Each command is described in detail, its syntax is given and examples are offered. Command: Description: ----------------------------------------------------------------------- add Add to a container answer Ask a question with buttons as choices ask Ask a question, allowing user to type response close Close a file convert Convert date and time data to a different format delete Delete a chunk from a container dial Dial a number with a modem divide Divide a container by an amount do Execute an expression as a statement edit script Edit the script of a HyperPAD object find Find text somewhere in your pad flushCache Write changed pages from memory to disk fxShow Execute the Show Partner F/X runtime get Put an expression into the local variable "it" global Declare a global variable go Change to another page, background, or pad hide Hide an object hilite Highlights text in a field multiply Multiply a container by an amount noSound Turn the speaker off (from sound or play) play Play music in the background playBack Play back previously recorded keystrokes pop page Change to a previously saved page print Print information from a pad ________________________________________________________________________ Chapter 11: Commands 100 ________________________________________________________________________ Command: Description: ----------------------------------------------------------------------- push page Save a page for later recovery using pop put Copy information to a container query Create a subset of pages based on criteria read Read chunks from a file record Record keystrokes for later playback run Run another program send Send a message to another object set Modify object properties setDefaultPopupColors Sets the popup colors to the default SetPopupColors Sets the colors used to display popups show Make an object visible sort Sort the pad sound Turn the speaker on a a particular frequency subtract Subtract an expression from a container visual Set up an effect for the next page change wait Wait some number of miliseconds write Write text to a file ----------------------------------- ADD Syntax: add to ; Purpose: The add command adds the value of the expression to the value of the destination and places the result into the destination. The must evaluate to a number or be a container holding a number. The must be a container. Note: You will receive a runtime error if either the or the is not a number. Examples: add 5 to page field 23; add 45.67 to word 2 of page field 1; ________________________________________________________________________ Chapter 11: Commands 101 ________________________________________________________________________ ----------------------------------- ANSWER Syntax: answer question [with [, [,]]]; Purpose: The answer command allows you to create dialog boxes that ask a question. The user responds by choosing one of the buttons supplied. The dialog box is similar to other HyperPAD dialog boxes and is always centered on the page. You can specify up to 3 buttons to choose from. The Answer dialog box looks like this: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ **** The Printed Documentation has a picture or screen shot here **** ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The is the text within the dialog box. The text can be many lines long, in which case it is word-wrapped. Use carriage returns to improve the readability of your messages. The user can choose one of up to three buttons you supply in , , . If you don't specify any buttons to choose from, HyperPAD uses the two default buttons: <> and . When the user accesses the dialog box, it remains on-screen until a choice is selected. After the user responds, either by selecting a choice or pressing ESC, the dialog box is removed and the selected button text is placed into the local variable it. For example, if the user selects <>, it will contain "Ok". If the user selects , it will contain "cancel". If the user presses ESC, then the variable it will be empty. ________________________________________________________________________ Chapter 11: Commands 102 ________________________________________________________________________ Examples: answer "Ok to quit?"; answer "Continue printing?" with "Yes","No"; answer "What color?" with "red","blue","green"; answer "Error printing!" with "Ok"; The following handler asks the user if it is Ok to quit: handler cancel; begin "Ok to quit?" with "Yes","No"; if it is "Yes" then quit; end; See Also: ask ----------------------------------- ASK Syntax: ask question [with ]; Purpose: The ask command allows you to gather information from the pad's user by creating a dialog box in which the user types a response. The Ask dialog box presents a question as a prompt, a text box in which to type a response, and <> and buttons. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ **** The Printed Documentation has a picture or screen shot here **** ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ When the user presses the <> button, the response is put in the local variable it. If there is no response, or is selected, the local variable it will be empty. ________________________________________________________________________ Chapter 11: Commands 103 ________________________________________________________________________ If you supply a default answer, it is presented in the text box as the default response. Then, when the user begins typing in a different response, the proposed answer is replaced by the typed one. Note: You cannot change the proposed buttons in the Ask dialog box. They will always be Ok and Cancel. Examples: ask "What is your name?"; The following uses ask to go to the page that the user specifies. If the user cancels the dialog box, the process stops: handler select; begin while true do begin ask "Go to which page?" with currentPage + 1; if it is empty then exit; go to page it; end; end; See Also: answer ----------------------------------- CLOSE Syntax: close ; Purpose: The close command closes a previously opened file. All files must be closed after you are finished with them. (You can open a file using the create and open functions.) Examples: close fh; The following example writes the contents of field 1 to a file: put create("data.dat") into fh; write field 1 to fh; close fh; Note: This command sends the close message. See Also: create, open, read, write ________________________________________________________________________ Chapter 11: Commands 104 ________________________________________________________________________ ----------------------------------- CONVERT Syntax: convert container to [and ]; convert var1 to seconds; convert var1 to dateItems; convert var1 to [long | short | abbreviated] date; convert var1 to [long | short] time; convert var1 to [long | short | abbreviated] date and [long | short] time; Purpose: This command converts dates to different formats. The range of dates HyperPAD understands starts from Saturday, January 1, 1583 -- the starting date of the Gregorian Calendar. Using convert, you can input a numerical date, like "5/8/90", and translate it to written form, like "Tuesday, May 8, 1990". The following are explanations of target formats using January 1, 1990 at 5:00:00 PM as an example. Date Format: Example: ----------------------------------------------------------------- date (same as short date) 1-1-90 The dash (-) is the only date separator output by convert long date Monday, January 1, 1990 abbreviated date Mon, Jan 1, 1990 seconds 12843766800 The number of seconds since 1-1-1583 time 5:00 PM long time 5:00:00 dateItems 1990,1,1,17,0,0,2 (year, month, day, hour, minute, second, day of week) ________________________________________________________________________ Chapter 11: Commands 105 ________________________________________________________________________ Container formats: The power of convert is derived from the flexible representation of the container being converted. The following are allowed: 1. Both the dash and slash (-,/) can be used as date separators. 2. Date item lists can be modified creating an invalid date and then normalized by converting it to another format. The following example modifies the dateItems list to figure out the date 40 days from today: get the seconds; --get today's date and time convert it to dateItems; --convert to date item list add 40 to item 3 of it; --add 40 days convert it to longDate; --normalize answer "40 days from now is" && it; The next example modifies the dateItems list to figure out what the date and time will be 18 hours from now: get the seconds; --get today's date in seconds convert it to dateItems; --convert to date item list add 18 to item 4 of it; --add 18 hours convert it to longDate and time; --normalize answer "18 hours from now is" && it; 3. The formats that you can convert from are loose. The following are suitable formats for convert: Example: Format: ----------------------------------------------------- Jan 1, 1990 date January 1, 1990 date Jan 1, 90 date Jan 1, 1990 11:20 date and time Mon, Jan 1, 90 11:20 AM date and time 11:20 time 11:20 PM time 11:20 Jan 1, 1990 time and date 11:20 Mon, Jan 1, 1190 time and date 65 seconds 1990,1,1,17,00,2 dateItems ________________________________________________________________________ Chapter 11: Commands 106 ________________________________________________________________________ Examples: This function returns the day of the week of the first day of the current month: function firstDay; begin get the date; convert it to dateItems; --represent as date items put 1 into item 3 of it; -- put 1 as day of the month convert it to long date; -- convert to string return word 1 of it; -- return day of week end; This handler computes tomorrows date: handler tomorrow; begin get the seconds; add 60 * 60 * 24 to it; convert it to long date; answer "Tomorrows date is" && it; end; Comments: The following months and days of the week and their abbreviations are recognized by HyperPAD: Keyword: Abbreviation: ------------------------------------------ january jan february feb march mar april apr may may june jun july jul august aug september sep october oct november nov december dec ________________________________________________________________________ Chapter 11: Commands 107 ________________________________________________________________________ Keyword: Abbreviation: ------------------------------------------ sunday sun monday mon tuesday tue wednesday wed thursday thu friday fri saturday sat See Also: time, longTime(), seconds(), date(), longDate() ----------------------------------- DELETE Syntax: delete from ; delete Purpose: The delete command can be used to remove a chunk of information, or all the information from a container. The number of characters removed from the container is specified by using a chunking expression involving items, words, lines or characters (see the section on Chunking). If you do not specify a chunk to be deleted, HyperPAD will delete all of the characters in the container. For example: delete page field 1; delete salesTax; Chunks are defined by the characters that are around them. When you delete items and lines from a container, you also remove the delimiter (either a comma or carriage return) that defines it. For example, deleting a line from a field would delete the carriage return at the end of the line (if there is one). The following example deletes items from a field. Suppose field 1 contains "Jim, John, Sally, Lisa". The following statement: delete item 2 to 3 of field 1; results in field 1 containing "Jim, Lisa". Note that "John, Sally," was deleted, including the commas. ________________________________________________________________________ Chapter 11: Commands 108 ________________________________________________________________________ When to use it: When you want to remove a specific part of a container's value while keeping the rest intact. Examples: delete myvar; delete page field 5; -- removes all chars in page field 5 The following example deletes the current line from page field 1: get the currentLine of page field 1; delete line it from page field 1; The next example deletes all of the lines that contain the word "BAD". Care is taken to make sure that the loop is performed the correct number of times because the number of lines change as we delete lines: put the number of lines of page field 1 into numlines; put 1 into i; while i numlines do begin if line i of page field 1 contains "BAD" then begin delete line i of page field 1; subtract 1 from numlines; end else add 1 to i; end; ----------------------------------- DIAL Syntax: dial [pulse | tone | noHayes] [with ]; Purpose: With dial, you can call any telephone number (using a modem) for voice communication. Specify pulse or tone dialing, depending on your phone service (the default is pulse). While dialing, you are presented with a message, indicating that dialing is in progress If the dial is successful, a dialog box will be displayed requesting that you pick up the phone. The modem will remain connected until this dialog box is removed (by selecting the <> button). The dial command performs the following steps when dialing the phone: 1. The modem port is initialized using the current settings of the global properties modem, dataBits, stopBits, parity, and baud. ________________________________________________________________________ Chapter 11: Commands 109 ________________________________________________________________________ 2. The modem is initialized using the Hayes modem command "ATV1E0", causing the modem to echo responses to HyperPAD. HyperPAD waits for the modem to respond "Ok". 3. The is prefixed with "ATDP" or "ATDT" depending on if you specified tone or pulse. Specifying replaces this default prefix with your own. For example, the following dial commands are the same: dial "5551212" with "ATDT"; dial tone "5551212"; 4. The is ended with a semi-colon and a carriage return. 5. The Progress box is displayed and the new expression is sent to the modem. 6. When the number has completed dialing, a dialog box is displayed indicating that it is Ok to pick up the phone. 7. After you select the <> button from this dialog box, the text "ATH0" is sent to the modem and HyperPAD waits for the modem to respond "Ok". If dial is unsuccessful, you will receive an error message . This error is not a normal runtime error, however, and will not stop execution of your script. You can determine if an error occurred by using the result() function. The result() will be the text "not dialed" if there was an error, or empty if the dial was successful. If you have a Hayes incompatible modem, you can use the noHayes option to dial the phone. In this case, HyperPAD will not send any modem commands to your modem. The dial command performs the following steps: 1. The modem port is initialized using the current settings of the global properties modem, dataBits, stopBits, parity, and baud. 2. If you specified , HyperPAD will prefix it to . 3. HyperPAD sends the new expression to the serial port. HyperPAD will not wait for a response; it will return immediately. For example: dial nohayes "5551212"; dial nohayes "D 5551212;" & return; The nohayes option is also useful to initialize your serial port. ________________________________________________________________________ Chapter 11: Commands 110 ________________________________________________________________________ The following example uses dial to initialize the COM1 port to 1200,N,8,1: set the modem to "com1"; set the baud to 1200; set the parity to "none"; set the stopBits to 8; set the dataBits to 1; dial nohayes empty; Examples: dial "315-463-1234"; dial "315-463-1234" with "ATZ"; dial pulse "9,18002341624"; if result() is "not dialed" then answer "Can't dial the phone"; The following example prompts for a number, then dials it. Special care is taken to check for an area code enclosed in parenthesis. This means that the number is long distance and should be preceded by a 1. ask "Number to dial:"; if char 1 of it is "(" then begin -- get rid of parenthesis get substitute(it,"(",""); get substitute(it,")",""); -- long distance put 1 before it; end; get substitute(it," ",""); dial it; if the result is not empty then answer "Error dialing the phone!"; Note: The serial port is not initialized until you issue the dial command. See Also: baud, parity, stopBits, dataBits, modem ________________________________________________________________________ Chapter 11: Commands 111 ________________________________________________________________________ ----------------------------------- DIVIDE Syntax: divide by Purpose: The divide command divides by and places the result back into . The must be a number or a container holding a number. The must be a container. Note: You will receive a runtime error if either the or the is not a number. Examples: divide page field 23 by 4; divide salesTax by 0.07; ----------------------------------- DO Syntax: do Purpose: The do command compiles and executes the . This command provides a mechanism for executing statements from within a handler that haven't been compiled. The do command executes statements the same way as the message box. Thus, you can use the do command to evaluate expressions, putting the result into the message box. The following example puts the result of a calculation into the message box: do "3 + 4 - " && page field 1; You can only execute one command at a time. Thus, the can contain many statements. The do command must compile the specified statement, which may cause a slight delay in your script execution. The compiler must be located in the disk file "HPAD2.OVL", which must be accessible for this command to work. ________________________________________________________________________ Chapter 11: Commands 112 ________________________________________________________________________ Examples: do "go to the next page"; answer "Go where" with "next","previous"; do "go to" && it && "page"; The following statements execute the contents of field 1: do page field 1; ----------------------------------- EDIT SCRIPT Syntax: edit [the] script of ; Purpose: This command is used to edit the script of different objects. This is the same as selecting the object's Info dialog box and selecting the button. Examples: edit the script of page "Preferences"; edit the script of page button 3; edit the script of background "Template"; edit the script of pad; ----------------------------------- FIND Syntax: find [part | whole] [in ]; Purpose: The find command locates text anywhere in your pad. If you restrict the search to a single background field, only text on any page in that field will be locate. If you don't restrict the search to a particular background field, find will locate text in any field in your pad. (The find command will not locate text on the painting layer of the page or background.) HyperPAD searches differently for a part than it does for a whole. The whole option tells HyperPAD to locate only whole words; that is, only occurrences that are enclosed by word delimiters (such as spaces, end of ________________________________________________________________________ Chapter 11: Commands 113 ________________________________________________________________________ lines, and punctuation) will be found. The part option tells HyperPAD to locate the text anywhere, even if it occurs within another word. For example, consider a field containing "John is a lawyer". The following statement will not find a match: find whole "law"; The next statement, however, will find a match: find whole "is"; Using find part, HyperPAD will find occurrences anywhere within the target text, even if the expression occurs within a word. For example, consider the same text "John is a lawyer". The following statement will find a match: find part "law"; Up to 10 strings can be specified. If more than one is given, find will locate any of the expressions in the destination. For example: find whole "john","joe","jack" After finding an occurrence, the user can press ENTER to search for the next instance of the string. If the user presses ENTER, the search begins on the current page where the previous find left off. If the user presses any other key, the search is terminated. If find locates a match within a locked field, you are taken to the page containing the match and the focus is set to the default object (because a locked field cannot receive the focus). If the user presses ENTER to locate the next match, the search begins on the next field after the locked one. If you use find from the message box, the Find in Progress box is displayed while HyperPAD searches; two beeps will sound if no matches are found. If you execute find from a script, the Find in Progress box and beeps won't occur. Determine the result of the find command using the result() function. If the find is successful, result will return "found". Otherwise, result will return "not found". Examples: To find John anywhere in the pad: find "John"; ________________________________________________________________________ Chapter 11: Commands 114 ________________________________________________________________________ To find John in the "first name" field: find "John" in field "First Name"; The following button handler locates the next occurrence of the highlighted text. If the user hasn't highlighted any text, the Ask dialog box will appear and ask for something to find: handler select; begin get the selectedText; if it is empty then ask "Find What?"; if it is empty then exit; find it; if the result is "not found" then answer "Can't find" && it with "Ok"; end; ----------------------------------- FLUSHCACHE Syntax: flushCache; Purpose: This command writes to disk all of the pages in memory that have been changed and empties the cache. Internally, HyperPAD keeps recently accessed pages in an area of the memory called the cache. When the cache becomes too large to fit in the memory, a page that hasn't been used in a long time is removed from the cache and written to disk. When to use it: Anytime you need more free memory for a particular operation, use this command. Also, use flushCache to prevent thrashing. (Thrashing is the constant disk access that occurs when the cache is full. For each new page read from the disk, a page must be written out.) Examples: flushCache; The following example frees up the maximum amount of memory before cycling through all of the pages in a pad: flushCache; for i = 1 to the number of pages do go to page i; Note: This command sends the flushCache message. The cache is flushed when the message is received by HyperPAD. See Also: maxDirtyPages, autoSave ________________________________________________________________________ Chapter 11: Commands 115 ________________________________________________________________________ ----------------------------------- FXSHOW Syntax: fxshow ; Purpose: This command is used to display images or screen shows from within HyperPAD. The fxshow command requires an external file called FXSHOW.EXE. The parameter is the DOS filename of the .PRO, .PR2, .SLD, or .GX2 file you want to view. When HyperPAD loads for the first time, HyperPAD looks for the file FXSHOW.EXE in the same directory as HPAD.EXE. If the file is found, you will see an additional credit message displayed at the bottom of the screen informing you that fxshow is available. You cannot use the fxshow command if FXSHOW.EXE is not located in this directory. The fxshow command causes HyperPAD to shrink down to 3K and run the program FXSHOW.EXE, passing it information about what files to load. Refer to Appendix 4, "Support for Show Partner F/X" for more information. When running the show, HyperPAD does the following: 1. Switches to the directory containing . 2. If no extension is specified, searches for files in this order: *.PRO, *.PR2, *.SLD, *.GX2. 3. Issues the suspend message to run FXSHOW.EXE. 4. Runs the show. 5. Returns control to HyperPAD. This is very similar to running a program with the run command, except that HyperPAD first changes to the directory containing the files you run. Examples: fxshow "sample"; fxshow "C:\FX\SAMPLE\SAMPLE"; fxshow "d:\pics\*.gx2"; Note: This command sends the fxshow message. The handler for this message is implemented in HyperPAD. ________________________________________________________________________ Chapter 11: Commands 116 ________________________________________________________________________ ----------------------------------- GET Syntax: get ; Purpose: Use get to retrieve a value and put it into the local variable it. The can be a constant, a literal, a function, or a container (the value of a variable, a field's contents, or the contents of the message box). Examples: get 1 + 2 * 3; get field 1 of page 25; get word 1 to 5 of line 6 of field id 2 of page 88; Using the local variable it will enhance script readability and execution speed, as shown in the following example: get the selectedText; if it is empty then ask "What do you want to find?"; if it is empty then exit; find it; See Also: put ----------------------------------- GLOBAL Syntax: global [,...]; Purpose: The global statement allows you to declare a global variable. A Global variable is accessible to all handlers, not just the handler in which it is defined. Global variables remain until you exit HyperPAD or run another program. Note: The global command cannot be used in a do command or in the message box. When to use it: If you want a particular variable to maintain its value between handlers or pads, you must define it as a global variable. Examples: global taxAmount,salesAmount,userName; ________________________________________________________________________ Chapter 11: Commands 117 ________________________________________________________________________ ----------------------------------- GO Syntax: go [to] [pad] [with diskChange ]; go [to] [of [pad] [with diskChange ]]; go [to] [of ] [of [pad] [with diskChange ]]; go back; go help; go home; Purpose: The go command changes to another page, background or pad. The destination indicates which page (and if necessary, which pad) will be displayed. If the destination specifies only a pad, HyperPAD goes to the default page (the page which was last accessed) of that pad. You can alter the destination by supplying a container as the destination. The diskChange option allows you to specify that the destination pad may be on a different disk. In this case, the user will be asked to switch disks using the that you supply as a prompt. For example: go to pad "a:phone" with diskChange "Insert Disk 2"; When you supply the diskChange parameter: 1. The current pad is closed. 2. HyperPAD displays a dialog box with the message the you supplied. 3. The user can then remove a disk and insert the disk containing the desired pad. If the user selects <>, HyperPAD will attempt to load the pad from the new disk. If the user is unable to insert the correct disk and presses at the dialog box, HyperPAD will attempt to load the original pad. If unable to do so, HyperPAD will ask the user to insert the original disk...and will continue to do so until the original disk has been inserted. The go home and go help statements are special because they use HyperPAD's special file searching method to locate the pad. ________________________________________________________________________ Chapter 11: Commands 118 ________________________________________________________________________ The statement go to pad "HOME"; may not be unable to locate the Home pad because it may not be in the current directory or path. Thus, if you want to access either the Home or Help pads you should use go home and go help. go back - is the same as selecting Back from the Go menu. go recent - goes to the most recently accessed page (the one that you just came from). You can also use ordinal types with the go command. The allowed ordinal types are: first, second, third,...,tenth next previous any middle this recent If you attempt to go to a page beyond the end of the pad, the result() function will return "no such page"; otherwise, it will return empty. Examples: go to page 1; go to page 1 of background 2; go to background "template"; go "phone"; go to pad "phone"; go to pad "phone" with diskChange "Insert Disk 2"; go to page 2 of pad "Phone"; go to page 1 of background 2 of pad "Phone" with diskChange "Insert Disk 2"; go to the next page; go to page (currentPage() + 10); go to page ("taxNumber" && i); ________________________________________________________________________ Chapter 11: Commands 119 ________________________________________________________________________ go to any page; go to the recent page; go to the first page of pad "Phone" ask "Go to what pad?"; -- ask for a name go to pad it; ask "Go to what page?"; -- ask for name or number go to page it; Note: Remember, pads are only referenced by name. Thus, the only way to go to a pad is to supply the DOS name of the pad: go to pad "phone"; Pages and backgrounds, however, can be referenced by either their number within the pad, their ID, or their name. For example: go to page 10; -- by page number go to page id 56; -- by page ID go to page "status"; -- by page name When going to backgrounds, HyperPAD really goes to pages on the specified background. The following list summarizes what happens with different go statements involving backgrounds: The following statement goes to the first page on the first background that you created. go to background 1; The next statement goes to the first page after the current page that is on a different background. go to the next background; The next statement goes to the fifth page that uses background 2. go to page 5 of background 2; The next statement goes to the next page after the current page that uses the same background. go to the next page of this background; ________________________________________________________________________ Chapter 11: Commands 120 ________________________________________________________________________ ----------------------------------- HIDE Syntax: hide ; Purpose: The hide command allows you to make the specified button or field invisible. This command actually modifies the visible property of the target object. In fact, the following two statements are equivalent: hide page button 1; set the visible of page button 1 to false; When to use it: If you want a button or field to become visible only when certain criteria are met, you can use hide and show to toggle the object's visibility. Examples: hide page field 1; hide background button 3; See Also: show, visible ----------------------------------- HILITE Syntax: hilite []; hilite ; hilite the message box; Purpose: This command highlights text within a field or the message box. The text that gets highlighted is copied into the selectedText. When highlighting text, the text becomes highlighted on the screen. ________________________________________________________________________ Chapter 11: Commands 121 ________________________________________________________________________ Examples: hilite char 1 to 5 of page field 1; hilite line 1 of page field 1; hilite the last line of me; hilite field "Last Name"; hilite the message box; hilite word 2 of msg; The following example locates the word "lawyer" in a field and highlights it. get offset("lawyer",field "occupation"); if it is 0 then exit; hilite char it to (it + 5) of field "occupation"; See Also: selectedText ----------------------------------- MULTIPLY Syntax: multiply by ; Purpose: This command multiplies the value of the by the value of the and places the result into the . The expression must be a number or a container holding a number. The destination must be a container. Note: You will receive a runtime error if the or the are not both numbers. Examples: multiply page field 1 by 6; multiply totalAmount by salesTax; multiply the message box by 10; See Also: add, subtract, divide ________________________________________________________________________ Chapter 11: Commands 122 ________________________________________________________________________ ----------------------------------- NOSOUND Syntax: noSound; Purpose: This command stops any music or tones that are currently being played. Examples: sound 2000; -- start a sound wait 200; -- 200 milliseconds noSound; -- turn it off The following example plays notes for 5 seconds. play "abcdefg"; wait 5000; noSound; Note: This command sends the noSound message which is implemented in HyperPAD. ----------------------------------- PLAY Syntax: play ; Purpose: The play command allows you to play music in the background while other HyperPAD tasks are taking place. ________________________________________________________________________ Chapter 11: Commands 123 ________________________________________________________________________ The is a string containing note and music commands: Command: Description: ----------------------------------------------------------------- A-G Play this note. +,# Make the preceding note sharp. - Make the preceding note flat. Ln Set the length of each note to n. L1= full note, L2 = 1/2 note, L3= 1/4 note (default). The range of n is 1 to 64. MN Play normal. Each not will play 7/8 of the time given by L. ML Music legato. Each note will play the full time given by L. MS Music staccato. Each note will play 3/4 of the time given by L. On Sets the current octave to n. The default is 2, the range of octaves is 0 to 6. Middle C is at the beginning of octave 3. Pn Pause = n. The range of n is 1 to 64. Tn Tempo = n. This sets the number of L4 quarter notes in one minute. The range of n is 32-255. The default is 120. >n Increases the octave of the next note by 1. ]; Purpose: The pop page command removes the last pushed page from the page stack and either goes to it or places it into a container. The push page command allows you to remember where you are in your pad as if you had placed a bookmark on that page. Then, when you want to return there, you use the pop page command. You can place a series of these bookmarks, in which case pop page will take you to those pages in the reverse order in which you placed them. ________________________________________________________________________ Chapter 11: Commands 125 ________________________________________________________________________ If you use the form pop page; you will actually be taken there (you will change pages and possibly the pad). You can also put the references to that page into a variable: pop page into pageRef; pageRef will contain a page reference similar to the following: page id 2 of pad "C:\HOME.PAD"; Examples: The following statements show several different uses of the page stack. The first example remembers the current page, fetches the user's name from the Home pad, and returns. push this page; go home; go to page "preferences"; put page field "User Name" into userName; pop page; push recent; pop page into pageRef; get the last word of pageRef; go to the first page of pad it; See Also: push page ----------------------------------- PRINT Syntax: print [at ,]; print ; print pages; Purpose: The print command prints either a page, a group of pages, or an expression at an optional X,Y location. Printing pages within HyperPAD is controlled by the current settings in the Print Page dialog box, the Page Setup dialog box, and the Printer Setup dialog box. Printing pages with the print command is exactly the same as choosing Print from the File menu and selecting the Pages option. ________________________________________________________________________ Chapter 11: Commands 126 ________________________________________________________________________ For example: print page 1; print page "status"; print the next page; print 10 pages; Printing text, on the other hand, is not controlled by the current print settings. You must turn the printer on and off manually (using the printer property) and eject pages by sending formfeeds from your script. The following steps are taken: 1. Turn the printer on. 2. Do your printing. 3. Turn the printer off. The print command keeps track of the printhead position internally. When you first turn the printer on, the print head is positioned at 1,1 on the page. As you print characters across the page, the print head X position changes to different coordinates, such as 10,1. As you print carriage returns, the X position is reset to 1 and the Y position is incremented, like 1,10. When you print an end of page (formfeed) the print head position is reset to 1,1. You can directly locate the print head using the print at syntax. For example: print "hello world" at 10,10; When using this syntax, you can only move the print head to the right on the current line or down on the page. The printhead cannot backtrack over already printed text. Examples: print page field 1; print page field 1 & return & page field 2; print formfeed; print page field "First Name" at 10,10; ________________________________________________________________________ Chapter 11: Commands 127 ________________________________________________________________________ The following example prints the AUTOEXEC.BAT file: set the printer to on; put open ("C:\AUTOEXEC.BAT") into fh; if the result is not empty then exit; while the result is not "eof" do begin read 1 line from fh; print it & return; end; set the printer to off; close fh; The following handler prints all the page fields in a pad: handler select; begin ask "Which pad?" with currentPad(); if it is empty then exit; go to pad it; for i = 1 to the number of pages do begin go to page i; for j = 1 to the number of pg flds do print page field j & return; end; end; ----------------------------------- PUSH Syntax: push ; push recent; Purpose: The push page command saves a page identifier on the page stack. The push page command remembers a page and pad so that you can later return there with the pop page command. You can think of this command as placing a bookmark at a location within a pad. ________________________________________________________________________ Chapter 11: Commands 128 ________________________________________________________________________ The push recent syntax saves the page that you just came from on the page stack. This is particularly useful for returning back there later, like in the following example: This handler belongs in a pad script. handler openPad; begin push recent; pass; end; When you want to return from where you came: handler select; begin pop page; end; When to use it: Use the push page command when you want to remember a particular location within a pad so that you can later return there. Examples: The following script visits every page of a background, sending a message to one of its fields and then returns to the page it started from. handler select; begin put 0 into total; push this page; for i=1 to the number of pages of bkgnd 2 do begin go to page i of bkgnd 2; send "reCalc" to field "Item Cost"; add pg fld "Item Cost" to total; end; pop page; answer "The total was" && total; end; Some other examples: push this page; push recent; push previous page; push next page; ________________________________________________________________________ Chapter 11: Commands 129 ________________________________________________________________________ push first page; push page 2 of bkgnd 4; See Also: pop page ----------------------------------- PUT Syntax: put [into ]; Purpose: The put command places information into a container: either a field, a variable, or the message box. The can be text, numeric, a numeric expression, or a container. The must be a container. Expressions are evaluated before they are stored in the destination. So, if you put an arithmetic equation, its result is placed into the destination. If no destination is specified the result is placed into the message box. The put command is probably the most often used command in PADtalk. It provides the only mechanism for copying data from one location to another. Examples: put 10 into page field 1; put longDate() into the message box; put "Wowee" after word 7 of pg fld id 8; put page field "subTotal" into page field "total"; put 10 into field 1 of page 6 of background 2; put empty into me; The following two statements are the same: put "hello"; put "hello" into the message box; The next two statements are also the same: put "hello" into it; get "hello"; See also: get ________________________________________________________________________ Chapter 11: Commands 130 ________________________________________________________________________ ----------------------------------- QUERY Syntax: query ; query clear; Purpose: The query command creates a subset of pages based on some criteria. The query command goes to each page of a particular background and evaluates a boolean (true or false) expression. If the expression is true, then the page is included in the query. If the expression is false, then the page is excluded from the query. A subset of the pages that meet the criteria is formed. The following example will include only pages that contain "John" in the "name" field. query field "Name" contains "John"; If you want to query on a numeric field: query field "Total" > 10; The following statement shows the versatility of the query command. It results in a random set of about half of the pages of any background being included in the query. query random(2) = 1; Once the query has been established, the pad user can view only those pages included in the subset. Using the built-in navigation tools (including PGUP and PGDN), the user can move between the pages in the group. While a query is active, the user can also print and sort those pages. Although you can use PADtalk commands to access other pages in the pad, in order to restore the pad to its pre-query state, you must clear the query with the query clear command. The query will also be cleared if you perform another query, exit to DOS, or run another program. For larger queries, HyperPAD may be required to create a temporary file to hold some query information. The file will reside in the program directory (where HPAD.EXE is located) and will have the same name as your current pad but with an ".IDX" file extension. The result of the query can be determined using the result() function. The result() will return "found" if the query found at least one page; otherwise the result() will return "not found". ________________________________________________________________________ Chapter 11: Commands 131 ________________________________________________________________________ Examples: query field 1 contains "Smith"; if the result is "not found" then answer "No pages in query."; query field 1 = 3 and field 2 10; query field 1 = 3 and field 2 10 or state = "NY"; See Also: find, sort ----------------------------------- READ Syntax: read from until end; read from until ; read characters | items | words | lines from ; Purpose: The read command reads data from a file into the local variable it. You can only read from files that have been opened using the open() function. The syntax read from until end is used to read all the characters that remain in the file starting at the current position in the file. put open("data.dat") into fh; read from fh until end; close fh; put it into field 1; The syntax read from until is used to read all of the characters up to the next occurrence of character starting at the current position. For example: put open("data.dat") into fh; read from fh until "A"; close fh; put it into field 1; The syntax read characters | items | words | lines from is used to read a number of characters, words, items, of lines from the file into the variable it. ________________________________________________________________________ Chapter 11: Commands 132 ________________________________________________________________________ For example: put open("data.dat") int fh; read 1 character from fh; put it; read 6 words from fh; put it; read 5 items from fh; put it; read 2 lines from it; put it; Words are surrounded by either spaces or carriage returns, items are determined by commas, and lines are defined by carriage returns. When reading from files, HyperPAD translates carriage return/line-feed pairs to single carriage returns. You can determine if you have reached the end of file using the result() function. If you have reached the end of file, the result() returns "eof". Otherwise, the result() will be empty. The end of file is determined by either an end of file marker (Hex 1A) or by reading the number of characters determined by the file size. For example: Examples: read from file_number until end; read from file_number until "@"; read n+1 words from file_number; read 1 line from file_number; This example reads the AUTOEXEC.BAT file into page field 1: put the open of "C:\AUTOEXEC.BAT" into fh; read from fh until end; close fh; put it into page field 1; The next handler reads a text file of names and addresses into the PHONE pad. Each record in the text file is separated by a blank line. The format of the phone record in the text file is as follows: Name Phone Number Address Name Phone Number Address ________________________________________________________________________ Chapter 11: Commands 133 ________________________________________________________________________ The address field can take up as many lines as necessary, as long as a blank line is understood as separating the records: handler readPhoneRecords; begin put open ("PHONE.TXT") into fh; repeat doMenu "new page"; read 1 line from fh; put it into field "Name"; read 1 line from fh; put it into field "Phone Number"; read 1 line from fh; put empty into "Address"; repeat read 1 line from fh; if it is not empty then put it after the last line of address; until it is empty; put address into field "Address"; until the result is "eof"; close fh; end; Note: The parameter is a number returned by the open() function. See Also: write, create(), append(), open() ----------------------------------- RECORD Syntax: record ; Purpose: This command records keystrokes for later playback using the playBack command. The number of keystrokes you can record is 100. Recorded keystrokes remain in memory when you run other programs. If there are any keys in the buffer when another program is launched, they are immediately played back when the running program is started. The contains the keystrokes that you want played back. Letters and punctuation are types in as normal, like: record "hello"; Special keys and key combinations are placed inside brackets, like: record "{alt+f}Njunk.pad{enter}"; ________________________________________________________________________ Chapter 11: Commands 134 ________________________________________________________________________ A complete list of all of the special keys and key combinations is located in Appendix 2, "Key Codes". The record command will translate all of the keys in the to numbers. In addition to keystrokes, there is a special command that you can place within brackets called pause. For example: record "{escape}{enter}{pause:5000}"; The pause command waits a specified number of milliseconds before continuing keystroke playback. Thus, {pause:500} waits for half a second. When to use it: When combined with the run command, the record and playback commands are particularly useful because you can pump keystrokes into other programs. Examples: record "this is a test"; record "{alt+f}ophone{enter}"; The following runs BASICA, loading a program called DEMO and running it: handler select; begin record "load ^"DEMO.BAS^"{enter}run{enter}"; playBack; run "BASICA.EXE"; end; Notes: This command sends the record message. HyperPAD handles the record message. See Also: playBack ----------------------------------- RUN Syntax: run ; run with programDirectory; run with pause; run with programDirectory,pause; Purpose: The run command executes other programs you use on your computer. While the external program is running, HyperPAD shrinks to 3K, ________________________________________________________________________ Chapter 11: Commands 135 ________________________________________________________________________ giving the program as much memory as possible. When you exit the external program, HyperPAD resumes where it left off. The pause parameter causes HyperPAD to display the message Press any key to return to HyperPAD before returning to HyperPAD. HyperPAD will resume after any keystroke or mouse button press. The programDirectory option controls which directory the program will be executed from. If specified, the current directory will be changed to the directory containing the program. If it is not specified, the current directory will remain unchanged. This parameter is used mainly with programs that require you run them from their own directory. When running another program, HyperPAD performs the following steps: 1. If the extension is not supplied, HyperPAD looks for .EXE, .COM, and .BAT files. 2. If a directory is specified with the filename, HyperPAD looks only in that directory for the program. 3. If no directory is specified, HyperPAD searches the following areas (in this order) for the program: a. The current directory. b. The directory specified by the environment variable HPADNET. c. The program directory (where HPAD.EXE is located). d. The startup directory (where HPAD.EXE was started from). e. Every directory specified in the path. You can determine the return code of the a program using the result() function. Normally, you can determine the return code of a program in a batch file using the DOS errorlevel batch command. In HyperPAD, this number is returned by the result() function. Examples: To return temporarily to the MS-DOS prompt: run environment("COMSPEC"); To run a standard program: run "C:\123\123.EXE" with programDirectory; To run a batch file called C:\BATS\TEST.BAT: run "C:\COMMAND.COM /c C:\BATS\TEST.BAT"; ________________________________________________________________________ Chapter 11: Commands 136 ________________________________________________________________________ To run a batch file leaving room for a larger environment: run "C:\COMMAND.COM /e:2048 /c C:\BATS\TEST.BAT"; To run a program and pause before it returns: run "FORMAT.COM A:" with pause; Abbreviations: programDir, progDir ----------------------------------- SEND Syntax: send to Purpose: The send command sends a message, along with its parameters, to a specific object. It allows you to redirect a message's normal travel up the hierarchy to another object. When to use it: Use the send command when you want some action to be performed that is handled by some other object or handler. It can also be used to bypass a message handler in the hierarchy. Parameters: The parameter is any message for which a handler has been defined in the hierarchy of the receiving object. The characters of the message must be enclosed in double quotes, like "select". The optional is a list of values separated by commas that will be used by the receiving message handler. Examples: send "select" to page button "Quit"; send "keyPress" 7181 to me; -- simulate ENTER send "changeTemp" "up",5 to fld "Thermostat"; The following statement avoids the other objects in the hierarchy by sending a message directly to HyperPAD: send "doMenu" "new page" to hyperpad; The send message will travel up the hierarchy of the receiving object. ________________________________________________________________________ Chapter 11: Commands 137 ________________________________________________________________________ The following example sends a message to one of two routines. It either adds or multiplies two numbers, depending on which option the user wants: handler _add(n1, n2); begin put n1 + n2; end; handler _multiply (n1,n2); begin put n1 * n2; end; handler select; begin answer "add or multiply" with "add", "multiply"; if it is not empty then send "_" & it 10,12 to me; end; Note: The send command changes the value of the me object, but does not change the value of target or currentObject. You can only send messages to objects within the current pad. If you send a message to another page, that page does not become the current page (i.e. it will not receive the openPage message). Parameter expressions are evaluated before the message is sent. ----------------------------------- SET Syntax: set [the] [of ] to ; Purpose: The set command establishes property values of the objects in your pads. With set, you can modify properties affecting buttons, fields, pages, backgrounds, pads, the message box, the menu bar, the status bar and the tool box. The properties that you can set for the different objects are described in Chapter Twelve, "Properties". Examples: set hilite of page button 1 to true; set lockScreen to false; set the color of page field 4 to black on white; ________________________________________________________________________ Chapter 11: Commands 138 ________________________________________________________________________ ----------------------------------- SETDEFAULTPOPUPCOLOR Syntax: setDefaultPopupColor; Purpose: This handler resets the colors of the popup menus to the same values that HyperPAD uses to display the pull down menus. These colors are modified depending on your computer's graphics card and the command line parameters /mono, /lcd, /B&W, and /color. See Also: popup(), setPopupColors ----------------------------------- SETPOPUPCOLORS Syntax: setPopupColors ,, ,; Purpose: This handler sets the display colors for future popup menus. The colors are used as follows: Color: Description: ---------------------------------------------------- Menu color The color of the menu, including the border Highlight color The color of a highlighted choice Letter color The color of the accelerator characters of the choices (specified with the & within the choice) Dimmed color The color of dimmed choices (specified with the @ character within the choice) Examples: setPopupColors 31,112,27,123; setPopupColors light green,black on grey,red,light grey; See Also: popup(), setDefaultPopupColors ________________________________________________________________________ Chapter 11: Commands 139 ________________________________________________________________________ ----------------------------------- SHOW Syntax: show ; Purpose: The show command makes the specified button or field visible; this is the same as setting the visible property of the object to true. When to use it: If you want a button or field to become visible only if certain criteria are met. Examples: show page button 3; show page field 7; The following two statements are equivalent: show button 1; set the visible of button 1 to true; See Also: hide, visible ----------------------------------- SORT Syntax: sort [ascending | descending] [text | numeric | date] by ; Purpose: The sort command reorders the pages belonging to a background according to a specified condition. The sort command works by cycling though all the pages of a particular background and evaluating an expression. The result of the expression is saved and used as a sort key. Once all of the sort information has been gathered, the pages are sorted in the specified order. For example, the following statement sorts a pad by the first background field: sort by field 1; For each page in the current background, the expression field 1 is evaluated and used as sort criteria. Suppose that there are 5 pages in this pad, each using the same background. ________________________________________________________________________ Chapter 11: Commands 140 ________________________________________________________________________ After sort has cycled through all of the pages and evaluated the expression, the situation is as follows: at page 1, field 1 = "Sue" at page 2, field 1 = "John" at page 3, field 1 = "Zev" at page 4, field 1 = "Lisa" at page 5, field 1 = "Jim" After sorting, the pages will be reordered as follows: page 5 will become page 1 ("Jim") page 2 will become page 2 ("John") page 4 will become page 3 ("Lisa") page 1 will become page 4 ("Sue") page 3 will become page 5 ("Zev") When there are multiple backgrounds in the pad, sort may appear to give incorrect results because pages in the pad that use different backgrounds will remain in their same positions. For example, suppose we have 7 pages, 5 pages using background 1 and 2 pages using background 2. We perform the same sort on the first page of background 1: page 1, background 1, field 1 = "Sue" page 2, background 2 page 3, background 1, field 1 = "John" page 4, background 1, field 1 = "Zev" page 5, background 2 page 6, background 1, field 1 = "Lisa" page 7, background 1, field 1 = "Jim" After sorting, the pad will be organized as follows (notice that the pages of background 2 remained in their relative positions in the pad): page 7, background 1 ("Jim") page 2, background 2 page 3, background 1 ("John") page 6, background 1 ("Lisa") page 5, background 2 page 1, background 1 ("Sue") page 4, background 1 ("Zev") The sort command treats the data differently if you specify text, numeric, or date. For text data, HyperPAD alphabetizes the data. For numeric data, HyperPAD compares numeric quantities. For dates, HyperPAD compares the data as dates (dates can be represented using any format the convert command recognizes). ________________________________________________________________________ Chapter 11: Commands 141 ________________________________________________________________________ The optional parameter ascending (the default) specifies that you want the data sorted with the lowest values near the front; descending specifies the opposite. For larger sorts, a disk file may be required to hold temporary sorting data. In such a case, HyperPAD creates a temporary file in either the directory specified by the TMP environment variable, or if TMP is not specified, in the directory from which you launched HyperPAD. To make sorting faster, therefore, you can have TMP specify a directory on a RAM disk, as in the following DOS command: SET TMP=D:\ Examples: sort descending by field "name"; sort by the last word of field "name"; sort numeric by field "age"; sort ascending date by field "birthday"; See Also: query, find ----------------------------------- SOUND Syntax: sound ; Purpose: The sound command turns the speaker on at a given frequency. The sound will remain on until you turn it off using the noSound command. Examples: sound 2000; wait 500; -- half a second noSound; Notes: This command sends the sound message. When the handler reaches HyperPAD, the sound handler is executed. ________________________________________________________________________ Chapter 11: Commands 142 ________________________________________________________________________ ----------------------------------- SUBTRACT Syntax: subtract from ; Purpose: The subtract command subtracts the value of the expression from the value of the destination and places the result into the destination. The must be a number or a container holding a number. The must be a container. Note: You will receive a runtime error if the and are not both numbers. Examples: subtract 5 from page field 23; ----------------------------------- VISUAL Syntax: visual [effect] [] [with delay ]; Purpose: The visual command sets up an effect to be used during the next page or pad change. Instead of simply replacing one page with another (which is the default) you can select an effect which alters the manner in which a page is placed on-screen. Once the effect has been executed, it is reset to the replace effect (the default). So, you must specify an effect each time you want it to occur. The following list includes all the effects and their usable directions: Effect: Direction: ---------------------------------------------------------- box in, out drip none fade none hsplit in, out peel upperleft, lowerleft, upperright, lowerright quad none replace none ________________________________________________________________________ Chapter 11: Commands 143 ________________________________________________________________________ When to use it: Visual effects are useful if you want to capture your audience's attention without distracting them from the information you're relating. Examples: The following example goes to the next or previous page depending on whether the SHIFT key is depressed when the button was selected. It uses an appropriate visual direction as a user feedback device. handler select; begin if the shiftKey is "down" then begin visual effect scroll down; go to the previous page; end else begin visual effect scroll up; go to the next page; end end; Comments: The visual effect is set to replace when the next idle message is sent (upon completion of all pending handlers). ----------------------------------- WAIT Syntax: wait ; Purpose: This command waits a specified number of milliseconds. Pressing CTRL+BREAK will terminate the wait command and stop execution of the script. The delay is the same for all computers. HyperPAD uses either the real time clock (on AT style computers) or the system clock (interrupt 8) so that it ticks 1000 times per second. Examples: wait 5000; -- 5 seconds wait i * 1000; -- if i = seconds ________________________________________________________________________ Chapter 11: Commands 144 ________________________________________________________________________ ----------------------------------- WRITE Syntax: write to ; Purpose: The write command adds data to an open file. Only files opened with the append() or create() function can be used with this command. Examples: To write a field to a file: put create("data.dat") into fh; write page field 1 to fh; close fh; Use the return constant to end a line: write page field "name" & return to fh; write page field "address" & return to fh; write page field "phone number" & return & return to fh; Note: Single carriage returns are translated to carriage return/line- feed pairs. All files are automatically closed when the user exits or runs another application using the run command.